{{tag>kernel tutoriel}}
----


====== Comment compiler un noyau de Kernel.org ======

Il peut être utile de compiler une ou nouvelle version du Noyau Linux (pour pallier une incompatibilité sources avec un module spécifique, pour activer/modifier un paramètre qui ne serrait pas dans la version du noyau distribuée avec Ubuntu) je vais donc détailler comment faire et j'invite tous ceux qui le veulent à ajouter des précisions ...

On peut aussi vouloir faire de la compilation croisée (compiler un noyau pour PowerPC sur un x86, etc) : voir [[compilation_croisee|ici]].

===== Pré-requis : =====

  * Savoir utiliser le [[:terminal]] / la [[:console]] ;
  * Savoir ce que sont "linux", "module", etc. ;
  * Une bonne heure pour configurer (seulement si vous souhaitez optimiser le noyau pour votre utilisation) ;
  * Deux bonnes heures ou plus pour la compilation suivant la puissance de votre ordinateur.

===== Dépendances =====

==== Paquets basique ====

Tout d'abord il faut installer le strict minimum pour la compilation :

[[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt://build-essential,initramfs-tools,fakeroot|build-essential initramfs-tools fakeroot]]**

[[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt://debconf-utils,dpkg-dev,debhelper,bin86|debconf-utils dpkg-dev debhelper bin86]]**

[[:tutoriel:comment_installer_un_paquet|Installez les paquets]] **[[apt://kernel-package|kernel-package]]**

Ou la ligne de commande pour tout installer d'un coup:
<code>sudo apt-get install build-essential initramfs-tools fakeroot debconf-utils dpkg-dev debhelper bin86 kernel-package</code>

==== Paquets pour créer le ".config" ====

".config", c'est le fichier de configuration contenant les instructions de compilation.

\\

Pour une interface en **console** (bleue) :
[[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt://libncurses5-dev|libncurses5-dev]]**

Pour une interface en **TK** (n'est plus disponible dans les versions récentes du noyau linux) :
[[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt://tk-dev|tk-dev]]**

Pour une interface en **GTK+** (noyau 2.6 seulement - interface assez mal foutue) :
[[:tutoriel:comment_installer_un_paquet|installez les paquets]] **[[apt://libglib2.0-dev,libgtk2.0-dev,libglade2-dev|libglib2.0-dev libgtk2.0-dev libglade2-dev]]**

Pour une interface en **QT4** (Fonctionne du noyau 2.6 au noyau 3.2 - sûrement l'interface la plus simple et complète - conseillée) :
[[:tutoriel:comment_installer_un_paquet|installez les paquets]] **[[apt://libqt4-dev,pkg-config|libqt4-dev pkg-config]]**

===== Téléchargement des sources =====

Tout d'abord téléchargeons les sources du noyau depuis Kernel.org:
[[http://www.kernel.org/pub/linux/kernel/|lien vers le ftp de kernel.org]]

Téléchargez l'archive où vous voulez, puis décompressez la.

===== Configuration particulière =====

Dans certains cas, certains pilotes propriétaires notamment, il faut préparer un peu plus le terrain pour compiler soit même un Noyau personnalisé. Autant vous dire qu'il est bien plus simple de compiler son noyau pour quelqu'un qui n'utilise que des pilotes libre.

FIXME cette partie est totalement dépassée, peut être n'est elle plus nécessaire, en tout cas aucune de ces infos ne sont encore garantis de fonctionner.

==== NVIDIA ====

=== Avec la technique des liens symboliques ===

Voir [[http://ubuntuforums.org/showthread.php?t=441013|ce How-To]].

=== Avec le module ===

Il faut installer le paquet de sources à inclure au noyau :

  - Si vous utilisez le paquet nvidia-glx-new, [[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt://nvidia-new-kernel-source|nvidia-new-kernel-source]]**
  - Si vous utilisez le paquet nvidia-glx, [[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt://nvidia-kernel-source|nvidia-kernel-source]]**
  - Si vous utilisez le paquet nvidia-glx-legacy, [[:tutoriel:comment_installer_un_paquet|installez le paquet]] **[[apt://nvidia-legacy-kernel-source|nvidia-legacy-kernel-source]]**


Une fois le paquet installé, il se trouve dans le dossier /usr/src/ ,alors décompressez :

<code>
tar xvfz nvidia<TAB>.tar.gz
</code>

Vous devriez avoir un dossier /modules/nvidia-kernel (ou nvidia-kernel-legacy ou nvidia-kernel-new selon le paquet installé).

Lors de la compilation, n'oubliez pas d'ajouter en paramètre (selon le paquet installé) :

<code>
--added-modules=nvidia-kernel
--added-modules=nvidia-kernel-legacy
--added-modules=nvidia-kernel-new
</code>

=== Avec le .run du site ===

Ne faites rien pour l'instant, puis une fois votre noyau compilé, téléchargez le .run sur le site officiel. Tutoriel [[:nvidia.run|ici]]

==== ATI ====

Si vous utilisez une carte ATI, vous n'utilisez peut être pas le pilote propriétaire (ou celui ci n'est peut être pas indispensable). Je vous conseil avant d'entreprendre la compilation du noyau de voir si les performances du pilote libre sont à votre goût (le pilote libre est parfois même plus performant que le propriétaire).

FIXME (Méthodes non-testée)

=== Avec la technique des liens symboliques ===

Voir [[http://ubuntuforums.org/showthread.php?t=441013|ce How-To]].

=== Avec le module ===

J'imagine que ça doit être comme pour NVidia avec le paquet **fglrx-kernel-source** ?? FIXME

=== Avec le .run du site ===

Ne faites rien pour l'instant, puis une fois votre noyau compilé, téléchargez le .run sur le site officiel. Tutoriel [[:ati.run|ici]]

===== Configuration du noyau =====

La configuration du noyau est l'étape où vous choisissez les options. Vous pouvez enlever l'ABS, ajouter des airbags, etc etc.

Tout d'abord ouvrez un **[[Terminal]]** puis rendez vous le dossier que vous avez décompressé grâce à la commande:

  cd /le/chemin/vers/le/dossier/qui/contient/linux

Puis lancez cette commande qui permet de récupérer la configuration du noyau que vous utilisez actuellement et qui vous demande automatiquement de gérer les conflits si l'ancienne configuration n'est pas compatible avec le nouveau noyau.

<code>
  make oldconfig
</code>

Vous pouvez garder toutes les réponses proposées par défaut et juste appuyer sur entrer lorsqu'il vous pose une question, mais si vous comprenez ce qui est dit cela permettra d'ajouter ou non de nouvelles fonctions à votre Noyau qui n'existait pas encore lorsque les développeurs d'Ubuntu on choisi le noyau qui serra intégré dans la version que vous utilisez actuellement.

Maintenant vous devez choisir l'une des différentes interfaces de configuration du noyau si vous voulez faire quelques modifications par rapport aux paramètres par défaut. Même si vous ne modifiez rien, je vous conseil d'y jeter un œil par curiosité. 

==== Interface de configuration en Mode console ====

Déconseillé pour les débutants et même les autres.

<code>
  make config
</code>

==== Interface de configuration en Mode semi-graphique (menu bleu) ====

<code>
  make menuconfig
</code>

==== Interface de configuration en GTK+ (interface GNOME -elle n'est pas bien finie...) ====

<code>
  make gconfig
</code>

==== Interface de configuration en TK ou en QT - Recommandé ====

<code>
  make xconfig
</code>

**Si la commande précédente retourne une erreur du type "qconf: cannot connect to X server", essayez :**
<code>
  #exit
  $sudo xhost +
  $su
  #cd /usr/src/linux-*
  #make xconfig
</code>

----

**Si vous n'avez rien à configurer, cliquez simplement sur enregistrer dans l'interface graphique qui apparaît**
Si vous avez envie de configurer au mieux votre noyau, aidez-vous de la page [[:tutoriel:kernel_options]] mais le mieux reste de lire les options et de bien vous amuser ^^ Vous ne risquez rien à compiler un Noyau inutilisable car les anciens restent tout de me installés sur le système, il vous suffira simplement d'en choisir un autre dans le menu GRUB au démarrage de votre ordinateur.

===== Compilation =====

<note important>Cette partie décrit la plupart des options possibles pour **make-kpkg**, et il y en a plein, les connaître ne vous servira pas à grand chose, **si vous voulez simplement créer un noyau classique rapidement, allez directement à la partie [[#Compilation basique]].**</note>

La compilation se fait avec **make-kpkg** qui automatise en fait plusieurs commandes :

  * make dep - établit les dépendances entre fichiers constitutifs du code noyau
  * make clean - supprime les objets résultant d'une compilation antérieure du noyau (si elle a eu lieu)
  * make bzImage - produit l'image compressée qui servira à l'amorçage
  * make modules - compile les modules

En résulte alors un paquet *.deb (si vous utilisez la cible buildpackage) qu'il faudra installer avec dpkg :

<code>
  sudo dpkg -i linux*.deb
</code>

==== Les arguments de compilation ====

Il existe différents arguments à make-kpkg :

=== --initrd ==

Le plus important, crée un fichier initrd qui permet d'utiliser des modules directement à l'amorçage du noyau.

=== --rootcmd=fakeroot|sudo ===

Vous permet de choisir avec quelle méthode vous permettez à make-kpkg d'utiliser les ressources de root.

Vous pouvez également compiler en root : 

<code>
jm@ubuntu:/usr/src/linux/$ su root
Password:
root@ubuntu:/usr/src/linux/$
root@ubuntu:/usr/src/linux/$ make-kpkg --initrd kernel_image
</code>

=== --added_modules ===

Pour ajouter des modules (alsa, nvidia/ATI, etc...). Pour en mettre plusieurs, séparez avec une virgule :

<code>
--added-modules=alsa-driver,nvidia-kernel-legacy
</code>

=== --append-to-version & --revision ===

**FACULTATIF**

Pour ajouter une version à votre noyau (voir [[:tutoriel/comment_compiler_un_kernel_sur_mesure_old]]).

==== Les cibles de compilation ===

=== buildpackage ===

**C'est celle qu'il faut utiliser si vous débutez !!**

Cela a pour conséquence d'utiliser la cible "clean et "binary" décrite ci-dessous. 

=== clean ===

Permet de « nettoyer le répertoire des sources du noyau de tous les fichiers créés par l'invocation de l'une des cibles données ci dessous, et effectue un make distclean » (traduction de la partie du manuel consacré à cette cible $ man make-kpkg).

=== binary ===

Cette cible « construit les quatre paquets Debian du noyau en utilisant les cibles kernel_source, kernel_headers, kernel_doc et kernel_image (traduction de la partie du manuel consacré à cette cible *$ man make-kpkg).


=== kernel_doc ===

Cet autre cible compile et crée pour vous un paquet Debian contenant les documentations fournis avec le noyau.


=== kernel_image ===

Cela permet de créer un paquet qui contient l'image du noyau, ses modules et permet aussi la configuration automatique de GRUB ou de LILO.

=== kernel_source ===

Cette cible construit un paquet Debian des sources du noyau Linux que vous compilez. Cela est particulièrement utile si vous souhaitez réutiliser ultérieurement les sources du noyau que vous souhaiteriez conserver.

=== kernel_headers ===
Celle-ci a pour but de produire un paquet Debian contenant les entêtes du noyau Linux. Les entêtes peuvent être nécessaires pour compiler certains programmes.

=== modules_image ===

Cette cible a pour but de produire un paquet Debian pour chaque module supplémentaire que vous avez installé et qui se trouve dans le répertoire /usr/src/modules/.

==== Compilation basique ====

La commande la plus basique pour compiler :

  make-kpkg --initrd buildpackage

Retournez dans le dossier précédent avec:

  cd ..

Et installer les *.deb :

== Sous Ubuntu ==

  sudo dpkg -i linux*.deb

== Sous Debian ==

  su -c 'dpkg -i linux*.deb'

Voilà c'est fait :-)
===== Liens =====

HOW-TO : Utiliser le linux-restricted-module pour un noyau compilé :

http://ubuntuforums.org/showthread.php?t=441013

Un bon guide pour Debian pleins d'infos sympa :

http://www.andesi.org/index.php?node=77

Un guide pour installer la carte wifi **Intel PRO/Wireless 2200BG**

http://forum.ubuntu-fr.org/viewtopic.php?pid=1108685#p1108685
-----
//Contributeurs: Créée par [[utilisateurs:Fabien26]], énormément améliorée par [[:utilisateurs/adam0509]], mise à jour par [[:utilisateurs/BeAvEr.]] et [[:utilisateurs/fleroi91]].//